package br.unicamp.ic.sgct.client.apresentacao.views;

import br.unicamp.ic.sgct.client.apresentacao.ucs.BaseConferenciaScreen;
import br.unicamp.ic.sgct.client.apresentacao.widgets.LabelCampoForm;
import br.unicamp.ic.sgct.client.dominio.to.UsuarioTO;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLTable.Cell;
import com.google.gwt.user.client.ui.HTMLTable.RowFormatter;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import java.util.List;
import org.gwtiger.client.widget.HoverGridWidget;

public class ViewListaUsuario extends Composite {
    private HoverGridWidget gridListaUsuario = new HoverGridWidget();
    private VerticalPanel panelListaUsuario = new VerticalPanel();
    private List<UsuarioTO> usuarios;
    private HandlerClickListaUsuario handler;
    private HTML strTabTitle = null;
    private int index = 0;

    public ViewListaUsuario(String title, int index, HandlerClickListaUsuario handler) {
        this.index = index;
        this.strTabTitle = new HTML(title);
        this.handler = handler;
        initPanel();
        initWidget(panelListaUsuario);
    }

    public ViewListaUsuario add(Widget w) {
        panelListaUsuario.add(w);
        return this;
    }

    private void initGrid() {
        gridListaUsuario.setHoverStyleName("grid-hover");
        gridListaUsuario.setWidth(600 + "px");
        gridListaUsuario.addClickHandler(new ClickHandler() {

            private int index;
            private boolean visible;

            @Override
            public void onClick(ClickEvent event) {
                Cell cell = gridListaUsuario.getCellForEvent(event);
                int i = cell.getRowIndex() - 1;
                if (this.index == i && visible) {
                    visible = false;
                } else {
                    visible = true;
                    UsuarioTO to = getUsuarios().get(i);
                    //montarDadosUniario(to);
                    handler.handle(to);
                    //outer.showLoading(true);
                }
                this.index = i;
            }
        });
    }


    public void montar(final List<UsuarioTO> usuarios) {
        gridListaUsuario.clearGrid();
        if (usuarios != null && !usuarios.isEmpty()) {
            this.usuarios = usuarios;
            gridListaUsuario.addHeader(1, "  Username  ");
            gridListaUsuario.addHeader(2, "  Data Pag.  ");
            gridListaUsuario.addHeader(3, "  Tipo  ");
            RowFormatter rowFormatter = gridListaUsuario.getRowFormatter();
            UsuarioTO usuario;
            for (int row = 0; row < usuarios.size(); row++) {
                usuario = usuarios.get(row);
                if (row + 1 % 2 == 0) {
                    rowFormatter.setStyleName(row + 1, HoverGridWidget.STYLE_ROW_EVEN);
                } else {
                    rowFormatter.setStyleName(row + 1, HoverGridWidget.STYLE_ROW_ODD);
                }
                gridListaUsuario.setId(row + 1, String.valueOf(usuario.getId()));
                gridListaUsuario.setText(row + 1, 1, usuario.getUsername());
                gridListaUsuario.setText(row + 1, 2, (usuario.getDataEfetivacaoPagto() == null ? "Nao Pag" : ViewUtil._dtTimeFormat.format(usuario.getDataEfetivacaoPagto())));
                gridListaUsuario.setText(row + 1, 3, usuario.getTipo());
            }
        }

    }

    /**
     * @return the usuarios
     */
    public List<UsuarioTO> getUsuarios() {
        return usuarios;
    }

    /**
     * @return the strTabTitle
     */
    public HTML getStrTabTitle() {
        return strTabTitle;
    }

    public interface HandlerClickListaUsuario{
        public void handle(UsuarioTO to);
    }


    private void initPanel() {
        panelListaUsuario.setVisible(false);
        panelListaUsuario.add(new LabelCampoForm("Participa\u00e7\u00e3o na confer\u00eancia"));
        initGrid();
        panelListaUsuario.setCellWidth(gridListaUsuario, "100%");
        panelListaUsuario.add(gridListaUsuario);
        //panelListaUsuario.add(panelDadosParticipacaoUsuario);

    }
}
